/**
 * @param {number[]} p1
 * @param {number[]} p2
 * @param {number[]} p3
 * @param {number[]} p4
 * @return {boolean}
 */
var validSquare = function (p1, p2, p3, p4) {
  // 利用Set()尝试实现
  let occ = new Set();
  // 计算所有点距离的平方
  occ.add((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2);
  occ.add((p1[0] - p3[0]) ** 2 + (p1[1] - p3[1]) ** 2);
  occ.add((p1[0] - p4[0]) ** 2 + (p1[1] - p4[1]) ** 2);
  occ.add((p2[0] - p3[0]) ** 2 + (p2[1] - p3[1]) ** 2);
  occ.add((p2[0] - p4[0]) ** 2 + (p2[1] - p4[1]) ** 2);
  occ.add((p3[0] - p4[0]) ** 2 + (p3[1] - p4[1]) ** 2);

  // 如果有距离为0，说明有重复点
  if (occ.delete(0)) return false;
  // 利用Set不重复的性质，如果四个点之间距离超过两个值或小于1个值就为0
  return occ.size === 2 ? true : false;
};

let p1 = [0, 0],
  p2 = [1, 0],
  p3 = [0, 0],
  p4 = [0, 0];
let demo = validSquare(p1, p2, p3, p4);
console.log(demo);

/* var validSquare = function (p1, p2, p3, p4) {
  // 计算四个点之间的相互距离，最长的距离是最短的距离的根号2倍，并且只有两个值
  // 利用Set()尝试实现
  let arr = [p1, p2, p3, p4];
  let occ = new Set();

  // 判断重复点
  for (let i = 0; i < 4; i++) {
    for (let j = i + 1; j < 4; j++) {
      // 判断重复点，重复点直接false
      if (!((arr[i][0] - arr[j][0]) ** 2 + (arr[i][1] - arr[j][1]) ** 2)) {
        return false;
      }

      // 计算任意两点之间的距离,只需判断不需要开根号，添加到Set集合中
      occ.add((arr[i][0] - arr[j][0]) ** 2 + (arr[i][1] - arr[j][1]) ** 2);
    }
  }
  // 利用Set不重复的性质，如果四个点之间距离超过两个值或小于1个值就为0
  return occ.size === 2 ? true : false;
}; */
